|
이 섹션은 Move Members 리팩토링 위에서 당신에게 포괄적인 overview를 제공하고 how 이 리팩토링이 IntelliJ
IDEA에서 사용될 수 있는가를 제공합니다.
IDEA에서, 이 리팩토링을 사용하면 당신은 정적인 필드, 메소드 또는 내부 클래스를 또 다른 클래스의 쪽으로 옮깁니다. 그 결과로, 정적인 메소드, 필드 또는 내부 클래스는 또 다른 위치로 옮겨지고 상응하는 참조는 업데이트됩니다.
예를 들면, 우리는 다음 클래스를 가집니다:
public class AClass {
public static void methodA() {
//some code here
}
public void methodB() {
//some code here
methodA();
}
}
그리고 당신은 정적인 methodA 를 AnotherClass 로 이동하는 것을 결정합니다, 그것은 이것과 같이 보입니다:
public class AnotherClass {
}
그리고 이것은 당신의 클래스가 리팩토링을 돌봐줄 방법입니다:
public class AClass {
public void methodB() {
//some code here
AnotherClass.methodA();
}
}
...
public class AnotherClass {
public static void methodA() {
//some code here
}
}
클래스 멤버를 옮기기 위해서:
1. Project 보기에서:
정적인 필드/메소드/내부 클래스를 선택하고 클래스 멤버를 오른쪽 버튼 클릭하는 것에 의해 불려지는 팝업 메뉴 에서 Refactor |
Move... 를 클릭하십시오.
|

|
당신은 메소드, 필드 또는 내부 클래스를 선택하기 위해 어떤 다른 보기를 사용할 수 있습니다, 예를 들면 Structure.
|
editor 에서 :
이동하게 될 정적인 필드/메소드/내부 클래스에서 캐럿을 선택하고 주 메뉴에서 또는 에디터에서 오른쪽 버튼을 클릭하는 것에 의해 불려지는 팝업 메뉴 에서 Refactor
| Move...를 클릭하십시오.
|

|
당신이 정적인 내부 클래스를 옮기려고 하고 있을 때, 선택한 내부 클래스를 위해 리팩토링을 선택하면 당신은 다음의 다이얼로그를 볼 것입니다:
|

만일 내부 클래스가 상위 수준으로 옮겨지면 Move Inner to Upper 리팩토링을 보십시오.
2. Move
Members 다이얼로그가 나타납니다:

|
Move members
from
|
|
이 필드는 어느 멤버가 옮겨지는지 클래스에 보여줍니다.
|
|
To (fully qualified
name):
|
|
여기에서 당신은 타겟 클래스의 완전 수식된 이름을 생성할 수 있거나, ellipsis버튼을 눌러서 필요한 타겟 클래스를 발견하도록 Choose
Destination Class 다이얼로그를 부를 수 있습니다:

|

|
만일 그런 이름이 있는 어떤 클래스도 없으면
IDEA는 새로운 클래스를 생성할 것을 제안할 것입니다.
|
|
|
Members to be
moved (static only)
|
|
이 목록에서 당신은 상응하는 체크 박스를 선택하는 것에 의해 이동되는 클래스 멤버를 선택할 수 있습니다.
|
|
Preview usages to
be changed
|
|
이 체크 박스를 선택하면 당신은 어떤 사용이 발견되었는지 추적하고, 그들의 교체를 승인하도록 허락합니다. 이 체크 박스가 선택되지 않을 때, IDEA는 교체 기능를 자동적으로 수행합니다.
|

|
심지어 체크 박스가 선택되지 않았을 때도, 만일 발견된 사용이 어떤 읽기 전용 파일에서 존재하면 교체 사용을 확인하는 프롬프트가 당신에 대기될 것 입니다.
|
Refactoring
Preview 다이얼로그에서 (만일 그것이 나타나면) 당신은 수행된 변경을 분석할 수 있습니다. 리팩토링과 함께 진행하기 위해서, Do
Refactor를 클릭합니다, 그렇지 않다면 Cancel 을 클릭합니다. 상세한 것을 보려면 Refactoring
Preview를 보십시오.
|
|
3. OK를 누릅니다, 그리고 원하는 멤버는 이동될 것입니다.
4. 멤버를 이동하려고 시도하면, 당신이 정적인 메소드/필드/내부 클래스(예를 들면 그들은 개인적 또는 로컬 패키지가 될 수 있습니다)를 이동하기를 원할 때 당신은 다른 메소드 또는 내부 클래스(예를 들면, 개인적인 또는 로컬 패키지)에서 그리고 그들의 소스 위치를 처리하지만 리팩토링 후에 그곳에서 보이지 않을 반대에서 영향을 받는 정적인 메소드/필드/내부 클래스가 재 위치하려고 하는 문제에 부딪칠지도 모릅니다. 그리고 관련된 코드는 이동되지 않습니다
예를 들면:
public class AClass {
private static int a = 0;
public static void f1(){
a = 1;
f2();
}
private static void f2(){
//some code here
}
}
여기 당신이 메소드 f2()가 아닌 메소드 f1()을 이동시키려고 합니다.
그때 다음의 Problems Detected 다이얼로그가 나타납니다.

만일 당신이 Cancel (디폴트)를 누르면, 당신은 Move
Members 다이얼로그에서 뒤로 갈 것입니다. 거기서 당신은 가능한 솔루션을 위해 탐색할 수 있습니다:
의심스러운 멤버를 이동하지 않습니다(여기- f1());
또한 멤버와 관련된 다른 것을 이동합니다. (여기- f2())l;
Move Members 리팩토링을 취소하고, 당신의 코드를 수동으로 정정하고, 원하는 멤버를 다시 옮기려고 합니다.
만일 당신이 Continue를 누르면, 원하는 멤버는 옮겨질 것이지만 컴파일 하기 위해서 당신은 코드를 수동으로 가지고 있을 것입니다.
|